#include <iostream>

#include "src/CmdParser.h"

int main(int argc, char *argv[]) {
	std::cout << "#ifndef CMD_PARSER__C_CMD_PARSER_H" << std::endl
			  << "#define CMD_PARSER__C_CMD_PARSER_H" << std::endl
			  << std::endl
			  << "#include <stdbool.h>" << std::endl
			  << std::endl
			  << "typedef struct CCmdParser {" << std::endl
			  << "\tchar data[" << sizeof(czj::util::CmdParser) << "];" << std::endl
			  << "} CCmdParser;" << std::endl
			  << std::endl
			  << "CCmdParser *cCmdParserNew(const char *_cmd);" << std::endl
			  << "void cCmdParserDelete(CCmdParser *_this);" << std::endl
			  << "void cCmdParserConstruct(CCmdParser *_this, const char *_cmd);" << std::endl
			  << "void cCmdParserDestruct(CCmdParser *_this);" << std::endl
			  << std::endl
			  << "void cCmdParserBindHelpKey(CCmdParser *_this, const char *_key);" << std::endl
			  << "bool cCmdParserAddBool(CCmdParser *_this, int _id, const char *_describe);" << std::endl
			  << "bool cCmdParserBindBoolKey(CCmdParser *_this, int _id, const char *_key);" << std::endl
			  << "bool cCmdParserGetBool(CCmdParser *_this, int _id);" << std::endl
			  << "bool cCmdParserAddVariable(CCmdParser *_this, int _id, const char *_describe, bool _nullable);" << std::endl
			  << "bool cCmdParserBindVariableKey(CCmdParser *_this, int _id, const char *_key, const char *_hint);" << std::endl
			  << "bool cCmdParserBindVariableExpression(CCmdParser *_this, int _id, const char *_key, const char *_operator, const char *_hint, const char *_default);" << std::endl
			  << "const char *cCmdParserGetVariable(CCmdParser *_this, int _id);" << std::endl
			  << "bool cCmdParserAddList(CCmdParser *_this, int _id, const char *_describe, bool _nullable);" << std::endl
			  << "bool cCmdParserBindListKey(CCmdParser *_this, int _id, const char *_key, const char *_hint);" << std::endl
			  << "bool cCmdParserBindListExpression(CCmdParser *_this, int _id, const char *_key, const char *_operator, const char *_hint, const char *_default);" << std::endl
			  << "bool cCmdParserGetList(CCmdParser *_this, int _id, const char **_buf, size_t _size);" << std::endl
			  << "void cCmdParserAddOperand(CCmdParser *_this, int _id, const char *_describe, const char *_hint);" << std::endl
			  << "const char *cCmdParserGetOperand(CCmdParser *_this, int _id);" << std::endl
			  << "void cCmdParserEnableExtension(CCmdParser *_this, const char *_describe, const char *_hint);" << std::endl
			  << "bool cCmdParserGetExtension(CCmdParser *_this, const char **_buf, size_t _size);" << std::endl
			  << "void cCmdParserHelp(CCmdParser *_this);" << std::endl
			  << "bool cCmdParserParse(CCmdParser *_this, int _length, const char *const *_arguments);" << std::endl
			  << std::endl
			  << "#endif // CMD_PARSER__C_CMD_PARSER_H" << std::endl;
}
